package org.jsola.hr.web;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.jsola.core.Page;
import org.jsola.core.Result;
import org.jsola.hr.dto.EmpPositionAddDTO;
import org.jsola.hr.dto.EmpPositionBatchDTO;
import org.jsola.hr.dto.EmpPositionUpdateDTO;
import org.jsola.hr.query.EmpPositionQuery;
import org.jsola.hr.vo.EmpContractExcelVO;
import org.jsola.hr.vo.EmpPaperContractExcelVO;
import org.jsola.hr.vo.EmpPositionListVO;
import org.jsola.hr.vo.EmpPositionVO;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * @author zhr
 */
@Api(tags = "hr-员工岗位关系")
public interface IEmpPositionControllerAPI {

    /**
     * 新增员工岗位关系
     * @param empPositionAddDTO 员工岗位关系新增实体
     * @return 员工岗位关系展示对象
     */
    @ApiOperation(value = "新增员工岗位关系")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empPositionAddDTO", dataType = "EmpPositionAddDTO", value = "新增员工岗位关系", paramType = "body")
    })
    Result<EmpPositionVO> save(EmpPositionAddDTO empPositionAddDTO);


    /**
     * 修改员工岗位关系
     * @param empPositionUpdateDTO 员工岗位关系
     * @return 更新数量
     */
    @ApiOperation(value = "修改员工岗位关系")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empPositionUpdateDTO", dataType = "EmpPositionUpdateDTO", value = "修改员工岗位关系", paramType = "body")
    })
    Result<Integer> update(EmpPositionUpdateDTO empPositionUpdateDTO);

    /**
     * 批量编辑、新增、删除员工岗位关系
     * @param empPositionBatchDTO 要操作的员工岗位关系
     * @return 操作之后的全部员工岗位关系
     */
    @ApiOperation(value = "批量编辑、新增、删除员工岗位关系")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empPositionBatchDTO", dataType = "EmpPositionBatchDTO", value = "要操作的字段数据", paramType = "body")
    })
    Result batch(EmpPositionBatchDTO empPositionBatchDTO);



    /**
     * 删除单个员工岗位关系，彻底删除
     * @param empPositionId 员工岗位关系id
     * @return 删除数量
     */
    @ApiOperation(value="删除单个员工岗位关系，彻底删除")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empPositionId", dataType = "String", value = "员工岗位关系id", paramType = "path")
    })
    Result<Integer> delete(String empPositionId);


    /**
     * 批量删除员工岗位关系，彻底删除
     * @param empPositionIds 员工岗位关系id集合
     * @return 删除数量
     */
    @ApiOperation(value = "批量删除员工岗位关系，彻底删除")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empPositionIds", dataType = "String[]", value = "员工岗位关系id数组", paramType = "body" ,allowMultiple = true)
    })
    Result<Integer> deleteBatch(String[] empPositionIds);


    /**
     * 根据员工岗位关系id查询员工岗位关系详情
     * @param empPositionId 员工岗位关系id
     * @return 员工岗位关系详情
     */
    @ApiOperation(value="根据员工岗位关系id查询员工岗位关系详情")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empPositionId", dataType = "String", value = "员工岗位关系id", paramType = "path")
    })
    Result<EmpPositionVO> findById(String empPositionId);


    /**
     * 查询员工岗位关系
     * @param empPositionQuery 员工岗位关系查询参数
     * @return page
     */
    @ApiOperation(value="查询员工岗位关系")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empPositionQuery", dataType = "EmpPositionQuery", value = "员工岗位关系查询参数", paramType = "query")
    })
    Result<List<EmpPositionListVO>> listAll(EmpPositionQuery empPositionQuery);


     /**
     * 分页查询员工岗位关系
     * @param empPositionQuery 员工岗位关系查询参数
     * @return page
     */
    @ApiOperation(value="分页查询员工岗位关系")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empPositionQuery", dataType = "EmpPositionQuery", value = "员工岗位关系查询参数", paramType = "query")
    })
    Result<Page<EmpPositionListVO>> page(EmpPositionQuery empPositionQuery);

}

